AWS CloudWach Events実行時に便利なConfigure input
コンニチハ、千葉です。
CloudWatch EventsではAutoScalingやAWSのAPIをトリガーにLambdaを実行することができます。
今回は、CloudWatchをトリガーに実行されたLambdaファンクションのインプットをカスタマイズしてみます。
設定箇所としては、CloudWatch Events作成時の以下の箇所となります。
Configure inputの種類
Lambdaファンクションへ渡せるインプットは3種類あります。ここで指定したものが、Lambdaのeventで受け取れます。
- Matched event:トリガー情報をすべて渡す
- Part of the matched event:指定した情報を渡す
- Constant (JSON text):自分で定義した情報を渡す
やってみた
実行するLambdaファンクション
スケジュールで以下のコードを実行して、eventの内容をCloudWatch Logsへ出力してみます。
import boto3 import logging logger = logging.getLogger() logger.setLevel(logging.INFO) def lambda_handler(event, context): try: #print event logger.info( event ) except Exception as e: print(e) raise e
Matched event
イベントソースによって異なりますが、スケジュールの場合は以下が出力されました。
{ u'account': u'***********', u'region': u'ap-northeast-1', u'detail': {}, u'detail-type': u'Scheduled Event', u'source': u'aws.events', u'version': u'0', u'time': u'2016-01-22T01:48:21Z', u'id': u'************', u'resources': [u'arn:aws:events:ap-northeast-1:***********:rule/inputConfigure'] }
※見やすいように改行しています(CloudWatch Logs上は改行されず1行です)
Part of the matched event
必要なデータを指定することができます。ここでは、timeだけ取り出してみます。
input configureに以下を指定します。
$.time
eventには以下が渡されました。ほしい情報だけ取得できました。
2016-01-22T02:28:21Z
Constant (JSON text)
任意のjsonを指定して取り出せます。パラメータをここに持たすことで、Lambdaファンクションの汎用化ができますね。
input configureに以下を指定します。
{ "Name": "Jun Chiba", "Like": "Sushi"}
eventには以下が渡されました。
{u'Name': u'Jun Chiba', u'Like': u'Sushi'}
最後に
inputのカスタマイズをしてみました。カスタマイズすることで柔軟に対応できそうですね。